home *** CD-ROM | disk | FTP | other *** search
- //////////
- //
- // File: QTReadWriteJPEG.h
- //
- // Contains: Sample code for compressing and decompressing JPEG images.
- //
- // Written by: Michael Marinkovich and Guillermo Ortiz
- // Revised by: Tim Monroe
- // Based heavily on the existing "JPEG Sample" code.
- //
- // Copyright: © 1996-1998 by Apple Computer, Inc., all rights reserved.
- //
- // Change History (most recent first):
- //
- // <1> 04/27/98 rtm first file
- //
- //////////
-
- //////////
- //
- // header files
- //
- //////////
-
- #include <FixMath.h>
- #include <ImageCompression.h>
- #include <Movies.h>
- #include <QuickTimeComponents.h>
- #include <StandardFile.h>
-
-
- //////////
- //
- // constants
- //
- //////////
-
- #define kImageFileCreator FOUR_CHAR_CODE('ogle')
- #define kBufferSize codecMinimumDataSize // data unload buffer size
-
- #define kSaveImagePrompt "Save compressed image as:"
- #define kSaveImageFileName "Untitled.jpg"
- #define kWindowTitle "Photo - JPEG"
-
- // JFIF (JPEG) markers
- enum {
- kSOFMarker = 0xC0, // start Of Frame N
- kSOFMarker2 = 0xC2,
- kDHTMarker = 0xC4, // DHT Marker
- kDACMarker = 0xCC, // DAC
-
- kRSTOMarker = 0xD0, // RSTO marker
- kSOIMarker = 0xD8, // image start marker
- kEOIMarker = 0xD9, // image end marker
- kSOSMarker = 0xDA, // SOS marker
- kDQTMarker = 0xDB, // DQT marker
-
- kAPPOMarker = 0xE0, // APPO marker
- kCommentMarker = 0xFE, // comment marker
-
- kStartMarker = 0xFF // marker loacted after this byte
- };
-
-
- //////////
- //
- // data types
- //
- //////////
-
- // a record to hold info about the JPEG data while we're loading it from disk
- struct DLDataRec
- {
- long fRefNum; // ref number of current file
- long fFileLength;
- Ptr fOrigPtr; // address of start of buffer
- Ptr fEndPtr; // address of end of buffer
- };
- typedef struct DLDataRec DLDataRec;
- typedef DLDataRec *DLDataPtr, **DLDataHnd;
-
-
- //////////
- //
- // function prototypes
- //
- //////////
-
- void QTJPEG_PromptUserForJPEGFileAndDisplay (void);
- OSErr QTJPEG_ReadJPEG (FSSpec theFSSpec, CGrafPtr *theGWorld);
- OSErr QTJPEG_ConvertJPEG (Handle image, CGrafPtr *newWorld);
- OSErr QTJPEG_ReadJPEGHeader (short theRefNum, ImageDescriptionHandle theDesc, Rect *theRect);
- UInt8 QTJPEG_FindNextMarker (long theRefNum);
- OSErr QTJPEG_HandleAPPOMarker (UInt8 theMarker, long theRefNum, ImageDescriptionHandle theDesc, Boolean *readingExtension);
- OSErr QTJPEG_HandleSOFMarker (long theRefNum, ImageDescriptionHandle theDesc, Boolean readingExtension);
- void QTJPEG_HandleSOSMarker (long theRefNum);
- UInt8 QTJPEG_ReadByte (short theRefNum);
- UInt16 QTJPEG_ReadWord (short theRefNum);
- void QTJPEG_SkipLength (long theRefNum);
- OSErr QTJPEG_NewJPEGWorld (GWorldPtr *theWorld, short theDepth, Rect theRect);
- OSErr QTJPEG_SaveJPEG (GWorldPtr theWorld);
- PASCAL_RTN OSErr QTJPEG_DataUnloadProc (Ptr theData, long theBytesNeeded, long theRefCon);
- PASCAL_RTN OSErr QTJPEG_DataLoadingProc (Ptr *theData, long theBytesNeeded, long theRefCon);
-